package br.com.bco.negocio;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.ForeignKey;
import org.joda.time.DateTime;

@Entity
@Table(name = "BCO")
public class BCO extends ObjetoPersistente {

    private static final long serialVersionUID = -3993123421191349450L;
    private String numero;
    private Integer lote;
    private DateTime data;
    private Veiculo veiculo;
    private Empresa empresa;
    private List<LancamentoBCO> lancamentosBCO;
    private List<Motorista> motoristas;
    private List<Cobrador> cobradores;
    private List<Despachante> depachantes;

    @Column(name = "NUMERO", length = 20, nullable = false)
    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    @Column(name = "LOTE", length = 8, nullable = false)
    public Integer getLote() {
        return lote;
    }

    public void setLote(Integer lote) {
        this.lote = lote;
    }

    @Transient
    public DateTime getData() {
        return data;
    }

    public void setData(DateTime data) {
        this.data = data;
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "VEICULO_ID")
    @ForeignKey(name = "FK_VEICULO_BCO")
    public Veiculo getVeiculo() {
        return veiculo;
    }

    public void setVeiculo(Veiculo veiculo) {
        this.veiculo = veiculo;
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "EMPRESA_ID")
    @ForeignKey(name = "FK_EMPRESAS_BCO")
    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    @OneToMany
    @JoinColumn(name = "BCO_ID")
    @ForeignKey(name = "FK_BCO_LANCAMENTOS_BCO")
    public List<LancamentoBCO> getLancamentosBCO() {
        return lancamentosBCO;
    }

    public void setLancamentosBCO(List<LancamentoBCO> lancamentosBCO) {
        this.lancamentosBCO = lancamentosBCO;
    }

    @ManyToMany
    @ForeignKey(name = "FK_BCO_MOTORISTAS")
    public List<Motorista> getMotoristas() {
        return motoristas;
    }

    public void setMotoristas(List<Motorista> motoristas) {
        this.motoristas = motoristas;
    }

    @ManyToMany
    @ForeignKey(name = "FK_BCO_COBRADORES")
    public List<Cobrador> getCobradores() {
        return cobradores;
    }

    public void setCobradores(List<Cobrador> cobradores) {
        this.cobradores = cobradores;
    }

    @ManyToMany
    @ForeignKey(name = "FK_BCO_DESPACHANTES")
    public List<Despachante> getDepachantes() {
        return depachantes;
    }

    public void setDepachantes(List<Despachante> depachantes) {
        this.depachantes = depachantes;
    }

}
